#include<iostream>
using namespace std;

//void Swap(int& a, int& b)
//{
//    int temp = a;
//    a = b;
//    b = temp;
//}
//void Swap(double& a, double& b)
//{
//    double temp = a;
//    a = b;
//    b = temp;
//}
//int main()
//{
//    int a = 1;
//    int b = 0;
//    cout << a << " " << b << endl;
//    Swap(a, b);
//    cout << a << " " << b << endl;
//    double c = 1.1;
//    double d = 2.1;
//    cout << c << " " << d << endl;
//    Swap(c, d);
//    cout << c << " " << d << endl;
//    return 0;
//}
//template<class T>
//template<typename T>
//void Swap(T& x, T& y)
//{
//    T temp = x;
//    x = y;
//    y = temp;
//}
//
//int main()
//{
//    int a = 1, b = 0;
//    double c = 1.1, d = 2.2;
//    cout << a << " " << b << endl;
//    cout << c << " " << d << endl;
//    swap(a, b);
//    swap(c, d);
//    cout << a << " " << b << endl;
//    cout << c << " " << d << endl;
//    return 0;
//}
template<typename T>
T Add(const T& x, const T& y)
{
    return x + y;
}

//int Add(const int& x,  int& y)
//{
//    return x + y;
//}
//template<typename T1, typename T2>
//T2 Add(const T1& x, const T2& y)
//{
//    return x + y;
//}
int main()
{
    cout << Add(1, 2) << endl;
    cout << Add(1.1, 1.2) << endl;
//    cout << Add((double)1, 1.1) << endl;
//    cout << Add(1, 1.1) << endl;
    cout << Add<int>(1, 1.1) << endl;
    cout << Add<double>(1, 1.1) << endl;
    return 0;
}
